package collection;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * java.util.List 线性表
 * List集合的特点:有序且可以存放重复元素
 * 常用的实现类:
 * java.util.ArrayList:内部使用数组实现，查询性能更好
 * java.util.LinkedList:内部使用链表实现，首尾增删性能更好
 * ArrayList可以满足大部分使用场景
 *
 * List除了Collection中定义的功能之外，其自身提供了一套可以通过下标操作元素的方法
 */
public class ListDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
//        List<String> list = new LinkedList<>();
        list.add("one");
        list.add("two");
        list.add("three");
        list.add("four");
        list.add("five");
        System.out.println(list);
        /*
            E get(int index)
            返回指定索引处的元素
         */
        String e = list.get(2);//String e = array[2];
        System.out.println(e);
        //List集合支持通过下标遍历
        for(int i=0;i< list.size();i++){
            e = list.get(i);
            System.out.println(e);
        }

        /*
            E set(int index, E e)
            将给定元素e设置到index为止，并返回该位置被替换下来的元素
         */
        String old = list.set(3,"six");
        System.out.println(list);
        System.out.println(old);

        /*
            利用get，set方法，实现集合的反转
         */
        for(int i=0;i<list.size()/2;i++){
            String s = list.get(i);//获取正数位置元素
            //将正数位置元素设置到对应的倒数位置，并获取替换下来的倒数位置元素
            s = list.set(list.size()-1-i,s);
            //将倒数位置元素设置到正数位置上，完成交换
            list.set(i,s);
        }
        System.out.println(list);//[five, six, three, two, one]
        /*
            java.util.Collections 集合的工具类
            静态方法:reverse(List list)，可以实现集合反转
         */
        Collections.reverse(list);
        System.out.println(list);
    }
}




